package com.wei.czz.framework.blog.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wei.czz.common.dto.blog.comment.CommentDto;
import com.wei.czz.common.vo.blog.comment.CommentFormVo;
import com.wei.czz.framework.blog.entity.BlogCommentEntity;
import org.apache.ibatis.annotations.Param;

import java.util.Date;

/**
 * Created by IntelliJ IDEA.
 *
 * @author wei
 * date: 2021-08-24 22:48:40
 * className: BlogCommentDao 博客评论操作请求数据库交互接口
 * version: 1.0
 * description:
 */
public interface BlogCommentDao extends BaseMapper<BlogCommentEntity> {

    /**
     * 分页查询博客评论列表操作
     * 注意：这个方法根据参数是否带有用户id，进而判断是否查询评论对应的用户名称
     * @param page          mp分页对象
     * @param commentFormVo 博客评论请求表单对象
     * @return 数据库查询结果
     */
    Page<CommentDto> getCommentList(Page<CommentDto> page, @Param("commentFormVo") CommentFormVo commentFormVo);

    /**
     * 根据博客id、被评论的用户id、置顶状态和删除状态，分页查询该博客的第一级评论信息
     * @param page         mp分页对象
     * @param blogId       博客id
     * @param userId       用户id
     * @param parentUserId 被评论的用户id（此方法只查询用户评论博客信息）
     * @param topStatus    置顶状态（此方法只查询正常博客评论）
     * @param deleteStatus 删除状态（此方法只查询正常的博客评论）
     * @return 博客评论列表
     */
    Page<CommentDto> getOneCommentList(Page<CommentDto> page, @Param("blogId") Long blogId, @Param("userId") Long userId,
                                       @Param("parentUserId") Long parentUserId, @Param("topStatus") Integer topStatus,
                                       @Param("deleteStatus") Integer deleteStatus, @Param("enableStatus") Integer enableStatus);

    /**
     * 根据评论区块id、被评论的用户id和删除状态，分页查询第一级评论的子评论信息
     * @param page         mp分页对象
     * @param blockId      评论区块id
     * @param parentUserId 被评论的用户id（此方法不查询用户评论博客信息）
     * @param deleteStatus 删除状态（此方法只查询正常的博客评论）
     * @return 博客评论列表
     */
    Page<CommentDto> getChildCommentList(Page<CommentDto> page, @Param("blogId") Long blogId, @Param("blockId") Long blockId,
                                         @Param("userId") Long userId, @Param("parentUserId") Long parentUserId,
                                         @Param("deleteStatus") Integer deleteStatus, @Param("enableStatus") Integer enableStatus);

    /**
     * 根据评论区块id，更新区块id关联的博客第一级评论的被回复数值
     * @param blockId      评论区块id
     * @param parentUserId 被评论的用户id（此方法）
     * @param num          变化值（val为1时，评论数加一。val为-1时，评论数减一）
     * @return 更新结果[1-更新成功 0-更新失败]
     */
    int updateOneCommentReplyNum(@Param("blockId") Long blockId, @Param("parentUserId") Integer parentUserId,
                                 @Param("num") Integer num);

    /**
     * 根据博客评论id，更新博客评论的点赞数值
     * @param commentId    博客评论id
     * @param num          变化值（val为1时，点赞数加一。val为-1时，点赞数减一）
     * @param updateTime   更新时间
     * @param updateUserId 操作更新的用户id
     * @return 更新结果[1-更新成功 0-更新失败]
     */
    int updateBlogCommentLikeNum(@Param("commentId") Long commentId, @Param("num") Integer num,
                                 @Param("updateTime") Date updateTime, @Param("updateUserId") Long updateUserId);
}
